from flask import Flask
import json
import os
import shutil
from pyxmpp2.simple import send_message

app = Flask(__name__)
gkm_json = open("gkm.json", "r")
parser = json.load(gkm_json)

jid = "bufkboun@cheogram.com"
password = "qazwsxedc123"


@app.after_request
def after_request(response):
  response.headers.add('Access-Control-Allow-Origin', '*')
  response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
  response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
  return response


@app.route("/")
def hello():
    return 'BÜFK Biletleyici'


@app.route("/yenigosteri/<tarih>/<saat>/<yer>")
def yenigosteri(tarih, saat, yer):
    gosteri = {
        "tarih": str(tarih),
        "saat": str(saat),
        "yer": str(yer)
    }
    try:
        os.mkdir("./gosteriler/{}".format(tarih))
        shutil.copy("gkm.json", "gosteriler/{}/salon.json".format(tarih))
        shutil.copy("satilan.json", "gosteriler/{}/satilan.json".format(tarih))
        shutil.copy("rezervasyon.json", "gosteriler/{}/rezervasyon.json".format(tarih))
        gosteriler_json_file = open("gosteriler.json", "r")
        json_parser = json.load(gosteriler_json_file)
        json_parser.append(gosteri)
        gosteriler_json_file.close()

        with open("gosteriler.json", "w") as gosteriler_json_file_to_write:
            json.dump(json_parser, gosteriler_json_file_to_write, sort_keys=True, indent=4)

        return "Yeni gösteri: {}".format(tarih)
    except FileExistsError:
        return "Gösteri zaten mevcut."


@app.route("/satis/<gosteri>/<koltuk>/<tip>/<isim>/<eposta>/<telefon>")
def satis(gosteri, koltuk, tip, isim, eposta, telefon):
    row = {
        "isim": str(isim),
        "eposta": str(eposta),
        "telefon": str(telefon),
        "koltuk": str(koltuk),
        "tip": str(tip),
    }
    with open("./gosteriler/{}/salon.json".format(gosteri), "r") as gosteri_salon_json:
        salon_parser = json.load(gosteri_salon_json)
        for giri in salon_parser:
            if giri["koltuk"] == koltuk and giri["satildi"] == False and giri["rezerve"] == False:
                giri["satildi"] = True
                satilan_json = open("gosteriler/{}/satilan.json".format(gosteri), "r")
                satilanlar = json.load(satilan_json)
                satilan_json.close()
                satilanlar.append(row)
                with open("./gosteriler/{}/satilan.json".format(gosteri), "w") as satilan_json_to_write:
                    json.dump(satilanlar, satilan_json_to_write, sort_keys=True, indent=4)
                with open("./gosteriler/{}/salon.json".format(gosteri), "w") as gosteri_salon_json_to_write:
                    json.dump(salon_parser, gosteri_salon_json_to_write, sort_keys=True, indent=4)
                return "{0} gösterisindeki {1} numaralı koltuk {2} kişisine satıldı.".format(gosteri, koltuk, isim)
            elif giri["koltuk"] == koltuk and giri["satildi"] == True:
                return "Bu koltuk zaten satılmış."
            elif giri["koltuk"] == koltuk and giri["rezerve"] == True:
                return "Bu koltuk rezerve."


@app.route("/rezervasyon/<gosteri>/<koltuk>/<tip>/<isim>/<eposta>/<telefon>")
def rezervasyon(gosteri, koltuk, tip, isim, eposta, telefon):
    row = {
        "isim": str(isim),
        "eposta": str(eposta),
        "telefon": str(telefon),
        "koltuk": str(koltuk),
        "tip": str(tip),
    }
    with open("./gosteriler/{}/salon.json".format(gosteri), "r") as gosteri_salon_json:
        salon_parser = json.load(gosteri_salon_json)
        for giri in salon_parser:
            if giri["koltuk"] == koltuk and giri["rezerve"] == False and giri["satildi"] == False:
                giri["rezerve"] = True
                satilan_json = open("gosteriler/{}/rezervasyon.json".format(gosteri), "r")
                satilanlar = json.load(satilan_json)
                satilan_json.close()
                satilanlar.append(row)
                with open("./gosteriler/{}/rezervasyon.json".format(gosteri), "w") as satilan_json_to_write:
                    json.dump(satilanlar, satilan_json_to_write, sort_keys=True, indent=4)
                with open("./gosteriler/{}/salon.json".format(gosteri), "w") as gosteri_salon_json_to_write:
                    json.dump(salon_parser, gosteri_salon_json_to_write, sort_keys=True, indent=4)
                return "{0} gösterisindeki {1} numaralı koltuk {2} kişisine rezerve edildi.".format(gosteri, koltuk, isim)
            elif giri["koltuk"] == koltuk and giri["satildi"] == True and giri["rezerve"] == False:
                return "Bu koltuk zaten satılmış."
            elif giri["koltuk"] == koltuk and giri["satildi"] == False and giri["rezerve"] == True:
                return "Bu koltuk rezerve."


@app.route("/salon/<gosteri>")
def salon(gosteri):
    with open("gosteriler/{}/salon.json".format(gosteri), "r") as salon_json:
        salon_durumu = salon_json.read()
        return salon_durumu


@app.route("/satilanlar/<gosteri>")
def satilanlar(gosteri):
    with open("gosteriler/{}/satilan.json".format(gosteri), "r") as satilan:
        satislar = satilan.read()
        return satislar

@app.route("/rezervasyonlar/<gosteri>")
def rezervasyonlar(gosteri):
    with open("gosteriler/{}/rezervasyon.json".format(gosteri), "r") as rezervasyon:
        rezervasyon_listesi = rezervasyon.read()
        return rezervasyon_listesi


@app.route("/gosteriler")
def gosteriler():
    with open("gosteriler.json", "r") as gosteriler_json:
        gosteri_listesi = gosteriler_json.read()
        return gosteri_listesi

@app.route("/bozuk_koltuklar")
def bozuk_koltuklar():
    with open("bozuk_koltuklar.json", "r") as bozuk_koltuklar_json:
        bozuk_koltuklar = bozuk_koltuklar_json.read()
        return bozuk_koltuklar

@app.route("/sms/<telefon>")
def sms(telefon):
    gosteri = "210699"
    koltuk = "f12"
    to = telefon + "@cheogram.com"
    tarih_pretty = gosteri[0:2] + "." + gosteri[2:4] + "." + gosteri[4:6]
    saat_pretty = ""
    yer_pretty = ""
    with open("gosteriler.json") as gosteri_json:
        parser = json.load(gosteri_json)
        for gosteri_giri in parser:
            if gosteri_giri["tarih"] == gosteri:
                saat_pretty = gosteri_giri["saat"]
                yer_pretty = gosteri_giri["yer"]
    saat_pretty = saat_pretty[0:2] + ":" + saat_pretty[2:4]
    message = "GECEDE DEVAM EDER RENK " + tarih_pretty + " " + saat_pretty + " " + yer_pretty + "SIRA: " + str(
        koltuk[0]).upper() + " NUMARA: " + koltuk[1:] + " BUFK IYI SEYIRLER DILER"
    print(message)
    send_message("bufkboun@dismail.de", "qazwsxedc123", to, message)
    return "SMS gönderildi"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9998)